<?php
declare(strict_types=1);

use think\migration\Migrator;
use think\migration\db\Column;

class InitMessageTemplates extends Migrator
{
    public function up()
    {
        // 先修改 platform_config 表，添加 is_merchant_editable 字段
        $this->table('platform_config')
            ->addColumn('is_merchant_editable', 'boolean', [
                'null' => false,
                'default' => 0,
                'comment' => '是否允许商家修改 0否 1是'
            ])
            ->update();

        // 初始化消息设置
        $this->table('message_setting')
            ->insert([
                [
                    'id' => 1,
                    'type' => 1, // 验证码通知
                    'scene' => 1, // 注册验证码
                    'create_time' => date('Y-m-d H:i:s'),
                    'update_time' => date('Y-m-d H:i:s')
                ],
                [
                    'id' => 2,
                    'type' => 2, // 业务通知
                    'scene' => 2, // 邀请成功通知
                    'create_time' => date('Y-m-d H:i:s'),
                    'update_time' => date('Y-m-d H:i:s')
                ],
                [
                    'id' => 3,
                    'type' => 2,
                    'scene' => 3, // 下单通知
                    'create_time' => date('Y-m-d H:i:s'),
                    'update_time' => date('Y-m-d H:i:s')
                ],
                [
                    'id' => 4,
                    'type' => 2,
                    'scene' => 4, // 提现成功通知
                    'create_time' => date('Y-m-d H:i:s'),
                    'update_time' => date('Y-m-d H:i:s')
                ],
                [
                    'id' => 5,
                    'type' => 2,
                    'scene' => 5, // 快递下单通知
                    'create_time' => date('Y-m-d H:i:s'),
                    'update_time' => date('Y-m-d H:i:s')
                ],
                [
                    'id' => 6,
                    'type' => 2,
                    'scene' => 6, // 快递轨迹变更通知
                    'create_time' => date('Y-m-d H:i:s'),
                    'update_time' => date('Y-m-d H:i:s')
                ],
                [
                    'id' => 7,
                    'type' => 2,
                    'scene' => 7, // 快递取消通知
                    'create_time' => date('Y-m-d H:i:s'),
                    'update_time' => date('Y-m-d H:i:s')
                ]
            ])
            ->save();

        // 初始化平台统一配置
        $platformConfigs = [
            // 小程序模板 (平台统一)
            [
                'group_name' => 'mini_program',
                'config_key' => 'invite_template',
                'config_value' => '123456789',
                'description' => '邀请成功小程序模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'mini_program',
                'config_key' => 'order_create_template',
                'config_value' => '123456790',
                'description' => '下单通知小程序模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'mini_program',
                'config_key' => 'withdraw_success_template',
                'config_value' => '123456791',
                'description' => '提现成功小程序模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'mini_program',
                'config_key' => 'express_create_template',
                'config_value' => '123456792',
                'description' => '快递下单小程序模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'mini_program',
                'config_key' => 'express_track_template',
                'config_value' => '123456793',
                'description' => '快递轨迹变更小程序模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'mini_program',
                'config_key' => 'express_cancel_template',
                'config_value' => '123456794',
                'description' => '快递取消小程序模板',
                'is_merchant_editable' => 0
            ],
            
            // 公众号模板 (平台统一)
            [
                'group_name' => 'official_account',
                'config_key' => 'invite_template',
                'config_value' => 'OPENTM123456789',
                'description' => '邀请成功公众号模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'official_account',
                'config_key' => 'order_create_template',
                'config_value' => 'OPENTM123456790',
                'description' => '下单通知公众号模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'official_account',
                'config_key' => 'withdraw_success_template',
                'config_value' => 'OPENTM123456791',
                'description' => '提现成功公众号模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'official_account',
                'config_key' => 'express_create_template',
                'config_value' => 'OPENTM123456792',
                'description' => '快递下单公众号模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'official_account',
                'config_key' => 'express_track_template',
                'config_value' => 'OPENTM123456793',
                'description' => '快递轨迹变更公众号模板',
                'is_merchant_editable' => 0
            ],
            [
                'group_name' => 'official_account',
                'config_key' => 'express_cancel_template',
                'config_value' => 'OPENTM123456794',
                'description' => '快递取消公众号模板',
                'is_merchant_editable' => 0
            ]
        ];

        // 添加创建和更新时间
        foreach ($platformConfigs as &$config) {
            $config['create_time'] = date('Y-m-d H:i:s');
            $config['update_time'] = date('Y-m-d H:i:s');
        }

        $this->table('platform_config')
            ->insert($platformConfigs)
            ->save();
    }

    /**
     * 创建商家默认消息模板 (商家可修改的部分)
     */
    public function createMerchantDefaultTemplates(int $merchantId)
    {
        $templates = [
            // 注册验证码 (商家可修改提示语)
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 1,
                'message_type' => 3, // 短信
                'template_no' => 'SMS_REGISTER_CODE',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '注册验证码',
                'template_content' => json_encode([
                    'first' => '欢迎注册我们的平台', // 商家可修改
                    'remark' => '如有疑问请联系客服' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 邀请成功通知 - 小程序 (商家可修改提示语)
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 2,
                'message_type' => 1,
                'template_no' => 'MINI_INVITE_SUCCESS',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '邀请成功通知',
                'template_content' => json_encode([
                    'first' => '恭喜您成功邀请新用户', // 商家可修改
                    'remark' => '感谢您的支持' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 邀请成功通知 - 公众号
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 2,
                'message_type' => 2, // 公众号
                'template_no' => 'MP_INVITE_SUCCESS',
                'template_id' => env('WECHAT_MP_INVITE_TEMPLATE_ID', ''),
                'template_name' => '邀请成功通知',
                'template_content' => json_encode([
                    'first' => '恭喜您，成功邀请新用户！',
                    'keyword1' => '用户昵称',
                    'keyword2' => '邀请时间',
                    'remark' => '感谢您的支持！'
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 下单通知 - 小程序
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 3,
                'message_type' => 1,
                'template_no' => 'MINI_ORDER_CREATE',
                'template_id' => env('WECHAT_MINI_ORDER_CREATE_ID', ''),
                'template_name' => '下单成功通知',
                'template_content' => json_encode([
                    'character_string1' => '订单编号',
                    'amount2' => '订单金额',
                    'time3' => '下单时间'
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 下单通知 - 公众号
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 3,
                'message_type' => 2,
                'template_no' => 'MP_ORDER_CREATE',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '下单成功通知',
                'template_content' => json_encode([
                    'first' => '您的订单已提交成功！', // 商家可修改
                    'keyword1' => '订单编号',
                    'keyword2' => '订单金额',
                    'keyword3' => '下单时间',
                    'remark' => '感谢您的支持，我们会尽快处理！' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 下单通知 - 短信
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 3,
                'message_type' => 3,
                'template_no' => 'SMS_ORDER_CREATE',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '下单成功通知',
                'template_content' => json_encode([
                    'first' => '您的订单已提交成功', // 商家可修改
                    'remark' => '感谢您的支持' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 提现成功通知 - 小程序
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 4,
                'message_type' => 1,
                'template_no' => 'MINI_WITHDRAW_SUCCESS',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '提现成功通知',
                'template_content' => json_encode([
                    'first' => '您的提现申请已处理成功', // 商家可修改
                    'amount2' => '提现金额',
                    'time3' => '处理时间',
                    'remark' => '如有疑问请联系客服' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 提现成功通知 - 公众号
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 4,
                'message_type' => 2,
                'template_no' => 'MP_WITHDRAW_SUCCESS',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '提现成功通知',
                'template_content' => json_encode([
                    'first' => '您的提现已到账！', // 商家可修改
                    'keyword1' => '提现金额',
                    'keyword2' => '到账时间',
                    'keyword3' => '到账账户',
                    'remark' => '如有疑问请联系客服' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 提现成功通知 - 短信
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 4,
                'message_type' => 3,
                'template_no' => 'SMS_WITHDRAW_SUCCESS',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '提现成功通知',
                'template_content' => json_encode([
                    'first' => '您的提现已到账', // 商家可修改
                    'remark' => '如有疑问请联系客服' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 快递下单通知 - 小程序
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 5,
                'message_type' => 1,
                'template_no' => 'MINI_EXPRESS_CREATE',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '快递下单通知',
                'template_content' => json_encode([
                    'first' => '您的快递订单已提交成功', // 商家可修改
                    'character_string1' => '快递单号',
                    'thing2' => '快递公司',
                    'amount3' => '运费金额',
                    'remark' => '快递员会尽快联系您' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 快递下单通知 - 公众号
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 5,
                'message_type' => 2,
                'template_no' => 'MP_EXPRESS_CREATE',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '快递下单通知',
                'template_content' => json_encode([
                    'first' => '您的快递订单已提交成功！', // 商家可修改
                    'keyword1' => '快递单号',
                    'keyword2' => '快递公司',
                    'keyword3' => '运费金额',
                    'keyword4' => '下单时间',
                    'remark' => '快递员会尽快联系您' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 快递下单通知 - 短信
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 5,
                'message_type' => 3,
                'template_no' => 'SMS_EXPRESS_CREATE',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '快递下单通知',
                'template_content' => json_encode([
                    'first' => '您的快递订单已提交成功', // 商家可修改
                    'remark' => '快递员会尽快联系您' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 快递轨迹变更通知 - 小程序
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 6,
                'message_type' => 1,
                'template_no' => 'MINI_EXPRESS_TRACK',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '快递轨迹变更通知',
                'template_content' => json_encode([
                    'first' => '您的快递有新动态', // 商家可修改
                    'character_string1' => '快递单号',
                    'thing2' => '快递公司',
                    'thing3' => '最新轨迹',
                    'time4' => '更新时间',
                    'remark' => '点击查看详情' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 快递轨迹变更通知 - 公众号
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 6,
                'message_type' => 2,
                'template_no' => 'MP_EXPRESS_TRACK',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '快递轨迹变更通知',
                'template_content' => json_encode([
                    'first' => '您的快递有新动态！', // 商家可修改
                    'keyword1' => '快递单号',
                    'keyword2' => '快递公司',
                    'keyword3' => '最新轨迹',
                    'keyword4' => '更新时间',
                    'remark' => '点击查看详情' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 快递轨迹变更通知 - 短信
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 6,
                'message_type' => 3,
                'template_no' => 'SMS_EXPRESS_TRACK',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '快递轨迹变更通知',
                'template_content' => json_encode([
                    'first' => '您的快递有新动态', // 商家可修改
                    'remark' => '请及时查看' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 快递取消通知 - 小程序
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 7,
                'message_type' => 1,
                'template_no' => 'MINI_EXPRESS_CANCEL',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '快递取消通知',
                'template_content' => json_encode([
                    'first' => '您的快递订单已取消', // 商家可修改
                    'character_string1' => '快递单号',
                    'thing2' => '取消原因',
                    'amount3' => '退款金额',
                    'time4' => '取消时间',
                    'remark' => '如有疑问请联系客服' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 快递取消通知 - 公众号
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 7,
                'message_type' => 2,
                'template_no' => 'MP_EXPRESS_CANCEL',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '快递取消通知',
                'template_content' => json_encode([
                    'first' => '您的快递订单已取消！', // 商家可修改
                    'keyword1' => '快递单号',
                    'keyword2' => '取消原因',
                    'keyword3' => '退款金额',
                    'keyword4' => '取消时间',
                    'remark' => '如有疑问请联系客服' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ],
            
            // 快递取消通知 - 短信
            [
                'merchant_id' => $merchantId,
                'message_setting_id' => 7,
                'message_type' => 3,
                'template_no' => 'SMS_EXPRESS_CANCEL',
                'template_id' => '', // 使用平台统一的模板ID
                'template_name' => '快递取消通知',
                'template_content' => json_encode([
                    'first' => '您的快递订单已取消', // 商家可修改
                    'remark' => '如有疑问请联系客服' // 商家可修改
                ], JSON_UNESCAPED_UNICODE),
                'status' => 1
            ]
        ];

        // 添加创建和更新时间
        foreach ($templates as &$template) {
            $template['create_time'] = date('Y-m-d H:i:s');
            $template['update_time'] = date('Y-m-d H:i:s');
        }

        $this->table('message_template_config')
            ->insert($templates)
            ->save();
    }

    public function down()
    {
        // 删除初始化的消息设置
        $this->table('message_setting')
            ->whereIn('id', range(1, 7))
            ->delete();

        // 删除初始化的平台配置
        $this->table('platform_config')
            ->whereIn('group_name', ['mini_program', 'official_account'])
            ->delete();

        // 删除 is_merchant_editable 字段
        $this->table('platform_config')
            ->removeColumn('is_merchant_editable')
            ->update();

        // 删除所有商家的默认消息模板
        $this->table('message_template_config')
            ->whereIn('template_no', [
                'SMS_REGISTER_CODE',
                'SMS_ORDER_CREATE',
                'SMS_WITHDRAW_SUCCESS',
                'SMS_EXPRESS_CREATE',
                'SMS_EXPRESS_TRACK',
                'SMS_EXPRESS_CANCEL',
                'MINI_INVITE_SUCCESS',
                'MINI_ORDER_CREATE',
                'MINI_WITHDRAW_SUCCESS',
                'MINI_EXPRESS_CREATE',
                'MINI_EXPRESS_TRACK',
                'MINI_EXPRESS_CANCEL',
                'MP_INVITE_SUCCESS',
                'MP_ORDER_CREATE',
                'MP_WITHDRAW_SUCCESS',
                'MP_EXPRESS_CREATE',
                'MP_EXPRESS_TRACK',
                'MP_EXPRESS_CANCEL'
            ])
            ->delete();
    }
} 